package com.colorlight.cloud.gateway.api.message.constraint.protocol;

import com.colorlight.cloud.gateway.api.message.constraint.schedule.ScheduleActions;
import com.iot.proto.type.ProtocolSummationType;

import java.io.Serializable;

/**
 * @author Demon
 * 协议类型
 */
public interface ProtocolType extends Serializable {
	
	/**
	 * 获取协议
	 *
	 * @return 协议类型 单一类型 全局唯一
	 * @author Demon
	 * @date 15/1/2024/下午8:12
	 **/
	String getInstructTypeName();
	
	/**
	 * 获取 当前协议的具体指令
	 * 需要通过指令做反射创建对象
	 *
	 * @return ScheduleActions class
	 * @author Demon
	 * @date 15/1/2024/下午8:08
	 **/
	Class<? extends ScheduleActions> getScheduleClass();
	
	
	/**
	 * 获取当前事件的协议类型（{@link ProtocolType}的实现类）
	 * @param nameStruct 原生协议
	 * @author Demon
	 * @date 22/5/2024/上午9:38
	 * @return 根据原生协议转化 为自定义协议类型
	 **/
	ProtocolType getByProtocolSummationType(ProtocolSummationType.NameStruct nameStruct);
	
	/**
	 * 获取 指令名
	 *
	 * @return 返回 指令名
	 * @author Demon
	 **/
	String getThisName();
}
